sorted 用於對數組進行排序,並返回一個新排序的數組。可以傳入一個閉包來自定義排序的規則。
let numbers = [5, 2, 1, 4, 3]
let sortedNumbers = numbers.sorted { $0 < $1 }
print(sortedNumbers)
這個閉包的作用是比較 $0 和 $1 的值。如果 $0 小於 $1,則這兩個元素的順序保持不變,否則順序會交換。這意味著閉包 { $0 < $1 } 會將數組按升序排列。
forEach 用於對數組中的每個元素執行某個操作,不返回任何值。
let numbers = [1, 2, 3, 4, 5]
numbers.forEach { print($0) }
因為不會回傳任何值,所以要print出來查看每個元素
輸出結果是
1
2
3
4
5
compactMap 用於對數組中的每個元素進行轉換,同時會自動移除轉換後為 nil 的值。
let possibleNumbers = ["1", "2", "three", "4", "five"]
let actualNumbers = possibleNumbers.compactMap { Int($0) }
print(actualNumbers) // 輸出: [1, 2, 4]
因為轉換three,five無法轉換,所以最後只保留[1,2,4]
flatMap 將多個數組的元素合併為一個單一數組,它也可以對可選值進行處理,並自動解包非 nil 的值。
let nestedArrays = [[1, 2, 3], [4, 5], [6, 7, 8]]
let flatArray = nestedArrays.flatMap { $0 }
print(flatArray) // 輸出: [1, 2, 3, 4, 5, 6, 7, 8]
簡單來說這會主動解包arrays裡面的值,並返回
展平過程
第一次迭代:$0 是 [1, 2, 3],這個子數組被展開並合併到結果數組中,結果是 [1, 2, 3]。
第二次迭代:$0 是 [4, 5],這個子數組被展開並合併到結果數組中,結果是 [1, 2, 3, 4, 5]。
第三次迭代:$0 是 [6, 7, 8],這個子數組被展開並合併到結果數組中,結果是 [1, 2, 3, 4, 5, 6, 7, 8]。
最終,所有子數組的元素都被展平並合併到一個單一的數組 flatArray 中。
這些高階函數能夠讓你的 Swift 程式更簡潔、更具表現力,並且能夠有效地處理數組、集合和其他序列類型的數據。我們的語法學習就到這邊囉,之後如果有遇到常見的還會再提醒大家,明天就開始分享怎麼新增專案,還有專案的事前建置的部分。大家明天見